#ifndef LCOM_MENU_H
#define LCOM_MENU_H

#include "xpm.h"

/** Assinatura das funções que são chamadas pelo menu 
 * \param mdata Dados associados ao menu
 * \param edata Dados associados à entrada do menu escolhida
 */
typedef void (* MenuCallback) (void *mdata, void *edata);

/** Entrada em um menu */
typedef struct {
	char *text;	/**< Texto exibido no menu */
	MenuCallback cb;/**< Callback associada à entrada do menu */
	void *data;	/**< Dados associados a esta entrada do menu */
} MenuEntry;

/** Menu */
typedef struct {
	enum XPMID title;	/**< XPM com o título do menu */
	unsigned int size; 	/**< Número de entradas no menu */

	void *data;	/**< Dados associados ao menu */
	int w;		/**< Largura do menu no ecrã */
	char bg;	/**< Cor de fundo */
	int border;	/**< Espaço até as bordas do menu */

	char sel_fg; 	/**< Cor do texto quando selecionado */
	char sel_bg; 	/**< Cor do fundo quando selecionado */
	char unsel_fg; 	/**< Cor do texto quando não selecionado */
	char unsel_bg; 	/**< Cor do fundo quando não selecionado */

	/** Opções do menu */
	MenuEntry *entries; 
} Menu;

/** Mostra um menu
 *
 * \param menu Menu a ser mostrado
 * \param x Posição X do menu no ecrã 
 * \param y Posição Y do menu no ecrã 
 */
void menu_show (Menu *menu, int x, int y);

#endif //LCOM_MENU_H

